﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using Delay;
using System.Reflection;
using Microsoft.Phone.Net.NetworkInformation;
using Ads;

namespace PhoneInfo
{
    public partial class App : Application
    {
      

        /// <summary>
        /// 视图用于进行绑定的静态 ViewModel。
        /// </summary>
        /// <returns>MainViewModel 对象。</returns>
      

        /// <summary>
        /// 提供对电话应用程序的根框架的轻松访问。
        /// </summary>
        /// <returns>电话应用程序的根框架。</returns>
        public static PhoneApplicationFrame RootFrame { get; private set; }
        private static ManagerDataContext _myManagerDB = null;
        public static ScrollViewer _ScrollViewer = null;
        public static ManagerDataContext ManagerDB
        {

            get
            {
                // Delay creation of the view model until necessary
                if (_myManagerDB == null)
                    _myManagerDB = new ManagerDataContext(ManagerDataContext.DBConnectionString);

                return _myManagerDB;
            }
        }
        public static SoftSitting appSitting;
        public static NetWorkTypes netType = NetWorkTypes.None;
        public static string lxt="";//账号,若是登陆只加载一次，如实自动登陆则保存
        public static SearchResultView selfResult = null;
        public static AdsHelper ads; //广告管理
        public static readonly string Appid = "8984";  //APP id
        public static readonly string softvs = "1";  //版本号
        public static readonly string channelkey = "E3A94DFE"; //渠道号
        public static readonly string keyvalue = "3EAC7283FD66491682B5153FCB89649F";
        public static readonly string softid = "8984"; //soft id
        public static Object obj = null;//页面传对象用的

        /// <summary>
        /// Application 对象的构造函数。
        /// </summary>
        public App()
        {
            // 未捕获的异常的全局处理程序。 
            UnhandledException += Application_UnhandledException;
            // 标准 Silverlight 初始化
            InitializeComponent();
            // 特定于电话的初始化
            InitializePhoneApplication();
            // 调试时显示图形分析信息。
            if (System.Diagnostics.Debugger.IsAttached)
            {
                // 显示当前帧速率计数器
              //  Application.Current.Host.Settings.EnableFrameRateCounter = true;
                // 显示在每个帧中重绘的应用程序区域。
                //Application.Current.Host.Settings.EnableRedrawRegions = true；
                // 启用非生产分析可视化模式， 
                // 该模式显示递交给 GPU 的包含彩色重叠区的页面区域。
                //Application.Current.Host.Settings.EnableCacheVisualization = true；
                // 通过将应用程序的 PhoneApplicationService 对象的 UserIdleDetectionMode 属性
                // 设置为 Disabled 来禁用应用程序空闲检测。
                //  注意: 仅在调试模式下使用此设置。禁用用户空闲检测的应用程序在用户不使用电话时将继续运行
                // 并且消耗电池电量。
                if (System.Diagnostics.Debugger.IsAttached)
                {
                    //Display the current frame rate counters.
                    //Application.Current.Host.Settings.EnableFrameRateCounter = true;
                    //Application.Current.Host.Settings.EnableRedrawRegions = true;
                    //Application.Current.Host.Settings.EnableCacheVisualization = true;
                }
              //  PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;
            }
            ads = new AdsHelper(Appid, channelkey, softid, softvs, keyvalue);
        }
        // 应用程序启动(例如，从“开始”菜单启动)时执行的代码
        // 此代码在重新激活应用程序时不执行
        private void Application_Launching(object sender, LaunchingEventArgs e)
        {//每次登陆没有数据库则创建一个
            using (ManagerDataContext db = new ManagerDataContext(ManagerDataContext.DBConnectionString))
            {
                if (db.DatabaseExists() == false)
                {
                    //创建一个数据库
                    db.CreateDatabase();
                }
            }
            writeSoftwareSittingForDB();
            appSitting = LoadSoftwareSittingForDB();
            ResourceDictionary newDictionary = new ResourceDictionary();
            if (appSitting.Theme == 1)
            {
                Theme.TurnGreen();
            }
            LowProfileXmlLoader.isNonPictureMode = appSitting.IsNonPictrueMode;
            List<userTable> list = loadDB();
            foreach (userTable item in list)
            {
                if (item.Type == "Head")
                {
                    lxt = item.Lxt;
                   // App.passWord = item.PassWord;
                }
            }
            
            selfResult = new SearchResultView();
            selfResult.ClassName = "selfResult";
            selfResult.AllowAdd = false;
            selfResult.Result = 0;
            selfResult.SetValue(LowProfileXmlLoader.UriSourceProperty, new Uri(selfResult.GetInitUrl(0)));
            
        }
        //加载用户名和密码
        private List<userTable> loadDB()
        {
            var userInDB = (from userTable user in App.ManagerDB.accountTable
                            select user).ToList();
            return userInDB;
        }
        // 激活应用程序(置于前台)时执行的代码
        // 此代码在首次启动应用程序时不执行
        private void Application_Activated(object sender, ActivatedEventArgs e)
        {
            
        }

        // 停用应用程序(发送到后台)时执行的代码
        // 此代码在应用程序关闭时不执行
        private void Application_Deactivated(object sender, DeactivatedEventArgs e)
        {
        }

        // 应用程序关闭(例如，用户点击“后退”)时执行的代码
        // 此代码在停用应用程序时不执行
        private void Application_Closing(object sender, ClosingEventArgs e)
        {
            // 确保所需的应用程序状态在此处保持不变。
        }

        // 导航失败时执行的代码
        private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
        {
            if (System.Diagnostics.Debugger.IsAttached)
            {
                // 导航已失败；强行进入调试器
                System.Diagnostics.Debugger.Break();
            }
        }

        // 出现未处理的异常时执行的代码
        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
        {
            if (System.Diagnostics.Debugger.IsAttached)
            {
                //出现未处理的异常；强行进入调试器
                System.Diagnostics.Debugger.Break();
            }
        }
        private void writeSoftwareSittingForDB()
        {
            //此函数只在数据库为空时调用
            //如果数据库中该表不为空 则返回
            var sitingInDB = from SoftSitting siting in App.ManagerDB.sittingTable
                             select siting;
            foreach (var item in sitingInDB)
            {
                // bsiting = true;
                return;
            }
            SoftSitting softSitting = new SoftSitting()
            {
                Theme=1,
                FontType=0,
                IsNonPictrueMode = false,
                IsReturnClear=false,
                AutoLoadNextPage=true,
                IsReturnRrompt=true
            };
            // 
            App.ManagerDB.sittingTable.InsertOnSubmit(softSitting);
            App.ManagerDB.SubmitChanges();
        }
        private SoftSitting LoadSoftwareSittingForDB()
        {
            //此函数只在数据库为空时调用
            //如果数据库中该表不为空 则返回
            var sitingInDB = from SoftSitting siting in App.ManagerDB.sittingTable
                             select siting;
            foreach (var item in sitingInDB)
            {
               
                return item;
            }
            return null;
        }

        #region 电话应用程序初始化

        // 避免双重初始化
        private bool phoneApplicationInitialized = false;

        // 请勿向此方法中添加任何其他代码
        private void InitializePhoneApplication()
        {
            if (phoneApplicationInitialized)
                return;

            // 创建框架但先不将它设置为 RootVisual；这允许初始
            // 屏幕保持活动状态，直到准备呈现应用程序时。
            RootFrame = new TransitionFrame();
            RootFrame.Navigated += CompleteInitializePhoneApplication;

            // 处理导航故障
            RootFrame.NavigationFailed += RootFrame_NavigationFailed;

            // 确保我们未再次初始化
            phoneApplicationInitialized = true;
        }

        // 请勿向此方法中添加任何其他代码
        private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e)
        {
            // 设置根视觉效果以允许应用程序呈现
            if (RootVisual != RootFrame)
                RootVisual = RootFrame;

            // 删除此处理程序，因为不再需要它
            RootFrame.Navigated -= CompleteInitializePhoneApplication;
        }

        #endregion
      
    }
}